In communications network equipment, protocol stacks are implemented at least partially software. Vulnerabilities in protocol stack implementations can be introduced by weak coding during development and careless modifications during maintenance. Thus, there exists a possibility of localization of vulnerabilities in specific sections of code. FIG. 1 is a graph illustrating how some areas of code may be more vulnerable than others. In FIG. 1, the three axes respectively illustrate fields, field values, and protocols. The cube represents all of the possible combinations of field, field values, and protocols. The shaded regions in the cube represent combinations of protocols, fields, and field values that are likely to cause a network protocol stack implementation to fail or transition to an invalid state. Due to the sometimes unpredictable nature of software development, the locations of such regions are often unknown and must be identified through testing.
One way to test the vulnerability of the protocol stack is referred to as black box fuzz testing. Black box fuzz testing involves the sending of messages to a protocol stack implementation with one or more field values in the messages being fuzzed or set to algorithmically changed values. The goal of fuzz testing is to identify combinations of fields and field values that cause the network communications protocol stack to fail or transition to an invalid state.
One way to perform black box fuzz testing is utilizing a brute force approach. The brute force approach to black box fuzz testing involves the testing of all possible combinations of protocols, fields, and field values without reducing the size of the parameter space during the testing. Because the parameter space for such brute force testing can be large, such testing is resource intensive and can require significant amounts and/or processing power to identify vulnerabilities. Thus, rather than performing brute force black box fuzz testing, it is desirable to perform fuzz testing in a manner that reduces the parameter space to converge on combinations of parameter values that result in communications network protocol stack vulnerabilities.
Accordingly, there exists a need for methods, systems, and computer readable media for converging on network protocol stack vulnerabilities using fuzzing variables, vulnerability ratings and progressive convergence.